#include "modelview.h"
#include "ui_modelview.h"
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QVariantList>
#include <QSqlError>
#include <QMessageBox>
#include <QDebug>
//插入记录类
#include <QSqlRecord>


ModelView::ModelView(QWidget *parent) :
	QWidget(parent),
	ui(new Ui::ModelView)
{
	ui->setupUi(this);
	ui->lineEdit->setPlaceholderText("输入id筛选");
	//打印支持的数据库驱动
	QStringList str = QSqlDatabase::drivers();
	qDebug() << str;
	//添加MySql数据库对象
	QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
	//连接数据库
	db.setHostName("rm-bp19kkjy1bne46g1cso.mysql.rds.aliyuncs.com");
	db.setUserName("bai");
	db.setPassword("bai188!@#");
	db.setDatabaseName("school");

	//打开数据库
	if(!db.open())
	{
		QMessageBox::warning(this,"数据库打开失败",db.lastError().text());
		return;
	}
	model = new QSqlTableModel(this);
	//指定表
	model->setTable("gp");
	//把model放入view
	ui->tableView->setModel(model);
	//显示数据
	model->select();
	//设置字段
	model->setHeaderData(0,Qt::Horizontal,"学号");
	//修改数据策略为手动提交或者源改变或者区域改变
	model->setEditStrategy(QSqlTableModel::OnManualSubmit);
	//只让显示不允许修改
//	ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
}

ModelView::~ModelView()
{
	delete ui;
}

void ModelView::on_pushButton_add_clicked()
{
	//添加空记录
	QSqlRecord record = model->record(); //获取空记录
	qDebug() << record;
//	//获取行号
	int row = model->rowCount();
	qDebug() << row;
	//插入新纪录但未提交至数据库
	model->insertRecord(row,record);
}

void ModelView::on_pushButton_confirm_clicked()
{
	//提交修改
	model->submitAll();
}

void ModelView::on_pushButton_cancel_clicked()
{
	//取消所有修改
	model->revertAll();
	model->submitAll();
}

void ModelView::on_pushButton_del_clicked()
{
	//获取选择的model
	QItemSelectionModel * selecte_model =  ui->tableView->selectionModel();
	//取出model索引
	QModelIndexList list = selecte_model->selectedRows();
	//删除选中的行
	for (int i=0;i<list.size();i++)
	{
		model->removeRow(list.at(i).row());
	}
}

void ModelView::on_pushButton_search_clicked()
{
	QString id = ui->lineEdit->text();
	QString str = QString("id = %1").arg(id);
	model->setFilter(str);
	//过滤完重新显示一下
	model->select();
}
